#pragma once

#include <boost/shared_ptr.hpp>
#include <boost/make_shared.hpp>

#include "exports.hpp"
#include "noncopyable.hpp"
#include "info.hpp"




namespace Engine
{
	class ENGINE_CORE_API Device
		: public noncopyable
	{
	public:

		friend class EngineImpl;
		typedef boost::shared_ptr<Device>   ptr;

	public:

		/**
		 * Reports the name of the Device.
		 */
		virtual QString name() const = 0;

		/**
		 * Reports the name of the underlying API this Device uses.
		 */
		virtual QString apiName() const = 0;



		/**
		 * Updates the device.
		 * Is called by the engine once per frame.
		 */
		virtual void update() = 0;
	};
	///////////////////////////////////////////////////////////////////////////////////////////////
}
///////////////////////////////////////////////////////////////////////////////////////////////////
